package com.dragon.mmochat.model.enumType;

public enum MmochatSpecialSkillType {
	横扫千军(1), 一击必杀(2), 道法无边(3);

	int value;

	public int getValue() {
		return value;
	}

	MmochatSpecialSkillType(int v) {
		value = v;
	}

	public static MmochatSpecialSkillType get(int v) {
		for (MmochatSpecialSkillType type : MmochatSpecialSkillType.values()) {
			if (type.getValue() == v) {
				return type;
			}
		}
		return null;
	}

	// 升级经验
	public static int getUpLevelExpOfSpecialSkill(
			MmochatSpecialSkillType skillType, int curLevel) {
		if (curLevel == 1) {
			return 15000;
		} else if (curLevel == 2) {
			return 30000;
		}
		return 100000000;
	}

	// 等级要求
	public static int getLevelNeedToLearnOfSpecialSkill(
			MmochatSpecialSkillType skillType, int skillLevel) {
		if (skillLevel == 1) {
			return 0;
		} else if (skillLevel == 2) {
			return 80;
		} else if (skillLevel == 3) {
			return 107;
		}
		return 0;
	}

	/*************** 横扫千军 ***************/

	// 伤害系数
	public static double getAttackParamOf横扫千军(int level) {
		if (level == 1) {
			return 0.4;
		} else if (level == 2) {
			return 0.6;
		} else if (level == 3) {
			return 0.8;
		}
		return 0;
	}

	// 触发机率:0-100
	public static double getAttackRateOf横扫千军(int level, long proficiency) {
		switch (level) {
		case 1: {
			if (proficiency < 20000) {
				return 10 + proficiency / 20000.0 * 10;
			} else if (proficiency < 60000) {
				return 20 + (proficiency - 20000) / 40000.0 * 10;
			} else if (proficiency < 140000) {
				return 30 + (proficiency - 60000) / 80000.0 * 10;
			} else if (proficiency < 300000) {
				return 40 + (proficiency - 140000) / 160000.0 * 10;
			} else {
				return 50;
			}
		}
		case 2: {
			if (proficiency < 20000) {
				return 20;
			} else if (proficiency < 60000) {
				return 20 + (proficiency - 20000) / 40000.0 * 10;
			} else if (proficiency < 140000) {
				return 30 + (proficiency - 60000) / 80000.0 * 10;
			} else if (proficiency < 300000) {
				return 40 + (proficiency - 140000) / 160000.0 * 10;
			} else if (proficiency < 620000) {
				return 50 + (proficiency - 300000) / 320000.0 * 10;
			} else {
				return 60;
			}
		}
		case 3: {
			if (proficiency < 60000) {
				return 30;
			} else if (proficiency < 140000) {
				return 30 + (proficiency - 60000) / 80000.0 * 10;
			} else if (proficiency < 300000) {
				return 40 + (proficiency - 140000) / 160000.0 * 10;
			} else if (proficiency < 620000) {
				return 50 + (proficiency - 300000) / 320000.0 * 10;
			} else if (proficiency < 1260000) {
				return 60 + (proficiency - 620000) / 640000.0 * 10;
			} else {
				return 70;
			}
		}
		default:
			break;
		}
		return 0;
	}

	/*************** 一击必杀 ***************/

	// 伤害系数:技能等级、灵气、目标数
	public static double getAttackParamOf一击必杀(int level, long proficiency,
			int targetNum) {
		double param = 0;
		switch (level) {
		case 1: {
			if (proficiency < 20000) {
				param = 20 + proficiency / 20000.0 * 5;
			} else if (proficiency < 60000) {
				param = 25 + (proficiency - 20000) / 40000.0 * 5;
			} else if (proficiency < 140000) {
				param = 30 + (proficiency - 60000) / 80000.0 * 5;
			} else if (proficiency < 300000) {
				param = 35 + (proficiency - 140000) / 160000.0 * 5;
			} else {
				param = 40;
			}
			break;
		}
		case 2: {
			if (proficiency < 20000) {
				param = 25;
			} else if (proficiency < 60000) {
				param = 25 + (proficiency - 20000) / 40000.0 * 5;
			} else if (proficiency < 140000) {
				param = 30 + (proficiency - 60000) / 80000.0 * 5;
			} else if (proficiency < 300000) {
				param = 35 + (proficiency - 140000) / 160000.0 * 5;
			} else if (proficiency < 620000) {
				param = 40 + (proficiency - 300000) / 320000.0 * 5;
			} else {
				param = 45;
			}
			break;
		}
		case 3: {
			if (proficiency < 60000) {
				param = 30;
			} else if (proficiency < 140000) {
				param = 30 + (proficiency - 60000) / 80000.0 * 5;
			} else if (proficiency < 300000) {
				param = 35 + (proficiency - 140000) / 160000.0 * 5;
			} else if (proficiency < 620000) {
				param = 40 + (proficiency - 300000) / 320000.0 * 5;
			} else if (proficiency < 1260000) {
				param = 45 + (proficiency - 620000) / 640000.0 * 5;
			} else {
				param = 50;
			}
			break;
		}
		default:
			break;
		}
		if (targetNum == 2) {
			// 2目标最多40%加成
			return Math.min(40, param);
		}
		return param;
	}

	/*************** 道法无边 ***************/

	// 触发机率:0-100
	public static double getLimitRateOf道法无边(int level, long proficiency) {
		switch (level) {
		case 1: {
			if (proficiency < 20000) {
				return proficiency / 20000.0 * 10;
			} else if (proficiency < 60000) {
				return 10 + (proficiency - 20000) / 40000.0 * 10;
			} else if (proficiency < 140000) {
				return 20 + (proficiency - 60000) / 80000.0 * 10;
			} else if (proficiency < 300000) {
				return 30 + (proficiency - 140000) / 160000.0 * 10;
			} else {
				return 40;
			}
		}
		case 2: {
			if (proficiency < 20000) {
				return 10;
			} else if (proficiency < 60000) {
				return 10 + (proficiency - 20000) / 40000.0 * 10;
			} else if (proficiency < 140000) {
				return 20 + (proficiency - 60000) / 80000.0 * 10;
			} else if (proficiency < 300000) {
				return 30 + (proficiency - 140000) / 160000.0 * 10;
			} else if (proficiency < 620000) {
				return 40 + (proficiency - 300000) / 320000.0 * 10;
			} else {
				return 50;
			}
		}
		case 3: {
			if (proficiency < 60000) {
				return 20;
			} else if (proficiency < 140000) {
				return 20 + (proficiency - 60000) / 80000.0 * 10;
			} else if (proficiency < 300000) {
				return 30 + (proficiency - 140000) / 160000.0 * 10;
			} else if (proficiency < 620000) {
				return 40 + (proficiency - 300000) / 320000.0 * 10;
			} else if (proficiency < 1260000) {
				return 50 + (proficiency - 620000) / 640000.0 * 10;
			} else {
				return 60;
			}
		}
		default:
			break;
		}
		return 0;
	}
}
